]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
barLevel: Support maxValue higher than 1
authorDidier Roche <didrocks@ubuntu.com>
Fri, 9 Feb 2018 13:02:21 +0000 (14:02 +0100)
committerFlorian Müllner <florian.muellner@gmail.com>
Tue, 31 Jul 2018 18:14:10 +0000 (18:14 +0000)
Ensure that both barLevel and slider can support a higher maxValue than 1
and computes various positions based on it.
It defaults to 1 if not set.

https://bugzilla.gnome.org/show_bug.cgi?id=790280.

js/ui/barLevel.js
js/ui/slider.js

index 2b35496b44a871acb4aac8e8a14482c12b9b2cac..1a1cc58eb64089ba992416a30724b020fc5930a5 100644 (file)
@@ -14,7 +14,8 @@ var BarLevel = new Lang.Class({
         if (isNaN(value))
             // Avoid spreading NaNs around
             throw TypeError('The bar level value must be a number');
-        this._value = Math.max(Math.min(value, 1), 0);
+        this._maxValue = 1;
+        this._value = Math.max(Math.min(value, this._maxValue), 0);
         this._barLevelWidth = 0;
 
         if (params == undefined)
@@ -44,7 +45,15 @@ var BarLevel = new Lang.Class({
         if (isNaN(value))
             throw TypeError('The bar level value must be a number');
 
-        this._value = Math.max(Math.min(value, 1), 0);
+        this._value = Math.max(Math.min(value, this._maxValue), 0);
+        this.actor.queue_repaint();
+    },
+
+    setMaximumValue(value) {
+        if (isNaN(value))
+            throw TypeError('The bar level max value must be a number');
+
+        this._maxValue = Math.max(value, 1);
         this.actor.queue_repaint();
     },
 
@@ -72,7 +81,9 @@ var BarLevel = new Lang.Class({
 
         const TAU = Math.PI * 2;
 
-        let endX = barLevelBorderRadius + (width - 2 * barLevelBorderRadius) * this._value;
+        let endX = 0;
+        if (this._maxValue > 0)
+            endX = barLevelBorderRadius + (width - 2 * barLevelBorderRadius) * this._value / this._maxValue;
 
         /* background bar */
         cr.arc(width - barLevelBorderRadius - barLevelBorderWidth, height / 2, barLevelBorderRadius, TAU * 3 / 4, TAU * 1 / 4);
@@ -118,7 +129,7 @@ var BarLevel = new Lang.Class({
     },
 
     _getMaximumValue(actor) {
-        return 1;
+        return this._maxValue;
     },
 
     _setCurrentValue(actor, value) {
index c1e2ea6a626a1cae75f7ba192006cd23156b680d..65ff8ca8a74a980fa84448417cea9f3882128292 100644 (file)
@@ -51,7 +51,7 @@ var Slider = new Lang.Class({
 
         const TAU = Math.PI * 2;
 
-        let handleX = handleRadius + (width - 2 * handleRadius) * this._value;
+        let handleX = handleRadius + (width - 2 * handleRadius) * this._value / this._maxValue;
         let handleY = height / 2;
 
         let color = themeNode.get_foreground_color();
@@ -159,7 +159,7 @@ var Slider = new Lang.Class({
             delta = -dy * SLIDER_SCROLL_STEP;
         }
 
-        this._value = Math.min(Math.max(0, this._value + delta), 1);
+        this._value = Math.min(Math.max(0, this._value + delta), this._maxValue);
 
         this.actor.queue_repaint();
         this.emit('value-changed', this._value);
@@ -181,7 +181,7 @@ var Slider = new Lang.Class({
         let key = event.get_key_symbol();
         if (key == Clutter.KEY_Right || key == Clutter.KEY_Left) {
             let delta = key == Clutter.KEY_Right ? 0.1 : -0.1;
-            this._value = Math.max(0, Math.min(this._value + delta, 1));
+            this._value = Math.max(0, Math.min(this._value + delta, this._maxValue));
             this.actor.queue_repaint();
             this.emit('drag-begin');
             this.emit('value-changed', this._value);
@@ -207,7 +207,7 @@ var Slider = new Lang.Class({
             newvalue = 1;
         else
             newvalue = (relX - handleRadius) / (width - 2 * handleRadius);
-        this._value = newvalue;
+        this._value = newvalue * this._maxValue;
         this.actor.queue_repaint();
         this.emit('value-changed', this._value);
     },